“평균 중심화( $\boldsymbol{Z}_c$ )와 정규화( $\frac{1}{m}$ )를 동일하게 적용한 상태에서, 순서를 바꾼 $\frac{1}{m} \boldsymbol{Z}_c \boldsymbol{Z}_c^\top$ 연산은 어떤 의미를 가지는가?”

위 $\boldsymbol{Z}_c^\top \boldsymbol{Z}_c$ 는 특징(Feature)과 특징 간의 관계. 즉, $i$ 번째 특징과 $j$ 번째 특징이 얼마나 함께 변하는지(상관관계)를 나타낸다.
그럼 반대로 $\boldsymbol{Z}_c \boldsymbol{Z}_c^\top$ 가 무엇을 의미하는지 생각해볼 수 있는데, $\boldsymbol{Z}_c \boldsymbol{Z}_c^\top$ 행렬의 $i$ 행 $j$ 열에 위치한 원소( $z_{ij}$ )가 어떻게 계산되는지 살펴보면 명확해진다.
$z_{ij}$ 는 $\boldsymbol{Z}_c$ 의 $i$ 번째 행 벡터(즉, $i$ 번째 샘플 데이터 $\boldsymbol{z}_i$ )와 $j$ 번째 행 벡터(즉, $j$ 번째 샘플 데이터 $\boldsymbol{z}_j$ )의 내적(Dot Product)인 $\boldsymbol{z}_i^\top \boldsymbol{z}_j$ 가 된다. 두 벡터의 내적은 기하학적으로 두 데이터 점이 원점(평균 중심화로 인해 데이터 분포는 원점으로 이동하였다.)으로부터 뻗어나가는 방향이 얼마나 일치하는지, 즉 코사인 유사도에 비례하는 값을 가지는 스칼라이다.
따라서 정규화 상수 $\frac{1}{m}$ 을 포함한 $\frac{1}{m} \boldsymbol{Z}_c \boldsymbol{Z}_c^\top$ 행렬은 통계학 및 선형대수학에서 그램 행렬(Gram Matrix) 또는 유사도 행렬(Similarity Matrix)이라고 불리며, 데이터 포인트들끼리의 상호 유사성을 기록한 $m \times m$ 크기의 행렬이 된다.

이 $\boldsymbol{Z}_c \boldsymbol{Z}_c^\top$ 연산은 이론적으로 머신러닝 알고리즘의 계산 효율성을 끌어올리는데 사용된다.
만약 고해상도 이미지 데이터를 다루는 상황에서, 샘플의 개수는 $m = 100$ 개인데, 각 샘플이 가진 특징의 개수는 $n = 10,000$ 개라고 해보자.
기존에 공분산 행렬 $\boldsymbol{Z}_c^\top \boldsymbol{Z}_c$ 를 구하려면 $10000 \times 10000$ 이라는 거대한 행렬을 연산하고 고윳값 분해를 해야 하므로 연산량이 폭발한다.
하지만 $\boldsymbol{Z}_c \boldsymbol{Z}_c^\top$ 를 구하면 고작 $100 \times 100$ 크기의 그램 행렬만 계산하면 된다.

특잇값 분해(SVD) 정리에 따르면, $\boldsymbol{Z}_c^\top \boldsymbol{Z}_c$ 와 $\boldsymbol{Z}_c \boldsymbol{Z}_c^\top$ 는 0이 아닌 고윳값(Eigenvalue)들을 공유한다. 이에 대한 증명은 다음과 같다.(MML에서 이에 대한 내용 찾아보기)
행렬 $\boldsymbol{Z}_c^\top \boldsymbol{Z}_c$ 의 고윳값을 $\lambda$ , 그때의 고유벡터를 $\boldsymbol{v}$ 라고 가정하자. (단, $\lambda$ 는 $0$ 이 아니라고 전제한다.)

$$ (\boldsymbol{Z}_c^\top \boldsymbol{Z}_c) \boldsymbol{v} = \lambda \boldsymbol{v} $$

위 식의 양변 왼쪽에 행렬 $\boldsymbol{Z}_c$ 를 곱한다.

$$ \boldsymbol{Z}_c (\boldsymbol{Z}_c^\top \boldsymbol{Z}_c) \boldsymbol{v} = \boldsymbol{Z}_c (\lambda \boldsymbol{v}) $$

행렬 곱셈은 결합법칙이 성립하므로 괄호의 위치를 바꿀 수 있고, 우변의 $\lambda$ 는 단순한 스칼라 상수이므로 행렬 앞으로 빼낼 수 있다.

$$ (\boldsymbol{Z}_c \boldsymbol{Z}_c^\top) (\boldsymbol{Z}_c \boldsymbol{v}) = \lambda (\boldsymbol{Z}_c \boldsymbol{v}) $$

여기서 괄호로 묶인 $\boldsymbol{Z}_c \boldsymbol{v}$ 를 완전히 새로운 벡터 $\boldsymbol{u}$ 라고 치환( $\boldsymbol{u} = \boldsymbol{Z}_c \boldsymbol{v}$ )하면,

$$ (\boldsymbol{Z}_c \boldsymbol{Z}_c^\top) \boldsymbol{u} = \lambda \boldsymbol{u} $$

결론적으로 $\boldsymbol{Z}_c^\top \boldsymbol{Z}_c$ 가 가지고 있던 고윳값 $\lambda$ 는, $\boldsymbol{Z}_c \boldsymbol{Z}_c^\top$ 의 고윳값과 같다.

두 번째로, 이를 특이값 분해 관점에서 직관적으로 볼 수 있다. 임의의 행렬 $\boldsymbol{Z}_c$ 는 세 행렬의 곱인 $\boldsymbol{U} \boldsymbol{\Sigma} \boldsymbol{V}^\top$ 로 분해될 수 있다. 이때 $\boldsymbol{U}$ 와 $\boldsymbol{V}$ 는 직교 행렬이며( $\boldsymbol{U}^\top \boldsymbol{U} = \boldsymbol{I}$ , $\boldsymbol{V}^\top \boldsymbol{V} = \boldsymbol{I}$ ), $\boldsymbol{\Sigma}$ 는 대각선에 특잇값(Singular value)을 가지는 대각 행렬이다.
가. 공분산 행렬( $\boldsymbol{Z}_c^\top \boldsymbol{Z}_c$ ):

$$ \boldsymbol{Z}_c^\top \boldsymbol{Z}_c = (\boldsymbol{V} \boldsymbol{\Sigma}^\top \boldsymbol{U}^\top) (\boldsymbol{U} \boldsymbol{\Sigma} \boldsymbol{V}^\top) $$

직교 행렬의 성질에 의해 이는 다음과 같다.

$$ \boldsymbol{Z}_c^\top \boldsymbol{Z}_c = \boldsymbol{V} \boldsymbol{\Sigma}^2 \boldsymbol{V}^\top $$

나. 샘플 간의 유사도 행렬( $\boldsymbol{Z}_c \boldsymbol{Z}_c^\top$ ):

$$ \boldsymbol{Z}_c \boldsymbol{Z}_c^\top = (\boldsymbol{U} \boldsymbol{\Sigma} \boldsymbol{V}^\top) (\boldsymbol{V} \boldsymbol{\Sigma}^\top \boldsymbol{U}^\top) $$

이 역시 직교 행렬의 성질에 의해 다음과 같이 쓸 수 있다.

$$ \boldsymbol{Z}_c \boldsymbol{Z}_c^\top = \boldsymbol{U} \boldsymbol{\Sigma}^2 \boldsymbol{U}^\top $$

가.와 나.의 결과를 비교해보면, 고유값을 가진 대각 행렬 $\boldsymbol{\Sigma}^2$ 은 동일하다.

차원이 너무 커서 연산이 불가능할 때, 특징 간의 공분산을 직접 구하는 대신 샘플 간의 유사도 행렬( $\boldsymbol{Z}_c \boldsymbol{Z}_c^\top$ )을 우회하여 연산한 뒤 수학적 변환을 통해 원래 원했던 주성분을 추출해 낼 수 있다.

유사도 행렬은 각 특징 차원이 만든 외적 행렬들의 합으로도 분해될 수 있음.